/**
 * P6Spy SQL格式化配置类
 * 用于自定义SQL语句的日志输出格式，提供更清晰的SQL执行信息
 * 包括执行时间、耗时、SQL语句等内容
 */
package cc.mrbird.febs.common.config;

import cc.mrbird.febs.common.utils.DateUtil;
import com.p6spy.engine.spy.appender.MessageFormattingStrategy;
import org.apache.commons.lang3.StringUtils;

import java.time.LocalDateTime;

/**
 * 实现P6Spy的MessageFormattingStrategy接口
 * 用于自定义SQL日志的输出格式
 */
public class P6spySqlFormatConfig implements MessageFormattingStrategy {

    /**
     * 格式化SQL日志消息
     * @param connectionId 数据库连接ID
     * @param now 当前时间
     * @param elapsed 执行耗时（毫秒）
     * @param category SQL类别
     * @param prepared 预处理SQL
     * @param sql 实际执行的SQL
     * @param url 数据库连接URL
     * @return 格式化后的SQL日志消息
     */
    @Override
    public String formatMessage(int connectionId, String now, long elapsed, String category, String prepared, String sql, String url) {
        return StringUtils.isNotBlank(sql) ? DateUtil.formatFullTime(LocalDateTime.now(), DateUtil.FULL_TIME_SPLIT_PATTERN)
                + " | 耗时 " + elapsed + " ms | SQL 语句：" + StringUtils.LF + sql.replaceAll("[\\s]+", StringUtils.SPACE) + ";" : "";
    }
}
